Зміст
Введення
Аналіз поставленого завдання
1.1 Обгрунтування достатності апаратних засобів і програмних ресурсів
1.2 довизначення набору апаратних засобів і програмних ресурсів
1.3 Розподіл функцій пристрою між вузлами мікроконтролера
1.4 Вибір і обгрунтування режимів роботи вузлів мікроконтролера
Проектування принципової схеми пристрою
2.1 Схема включення мікроконтролера
2.2 Формування тактових імпульсів
2.3 Організація скидання
2.4 Схеми вхідних і вихідних пристроїв
2.5 Схема джерела напруги харчування
Проектування програмного забезпечення мікропроцесора
3.1 Проектування модуля ініціалізації мікроконтролера
3.2 Проектування процедур обробки переривань
3.3 Проектування процедур обробки інформації
3.4 Проектування процедур виведення інформації
3.5 Проектування процедури Main ()
Лістинг програми
Висновок
Введення
В даний час вбудовані комп'ютерні системи отримують все більше поширення з-за їх високої якості та надійності, а так само простоти обробки інформації.
У ході курсового проекту необхідно розробити КС яка буде зчитувати дані з послідовного порту і виводити оброблену інформацію на LCD індикатор.
За технічним завданням на курсовий проект КС повинна бути побудована на мікроконтролері MSP 430.
Мікроконтролери MSP430 - це 16-розрядні мікроконтролери RISC-архітектури, з розвиненою периферією і наднизьким енергоспоживанням Мікроконтролери сімейства MSP430 містять 16-розрядне RISC CPU, периферійні модулі та гнучку систему тактирования, з'єднані через фон-неймановскую загальну адресну шину (MAB) пам'яті і шину пам'яті даних (MDB). Об'єднуючи сучасне CPU з відображеними в пам'яті аналоговими і цифровими периферійними пристроями, сімейство MSP430 пропонує рішення для додатків зі змішаними сигналами.
Аналіз поставленого завдання.
Темою курсового проекту є "Віддалене пристрій індикації".
Розглянемо загальну структурну схему, наведену на малюнку 1.
Рисунок 1 - Структурна схема пристрою.
В якості мікроконтролера виберемо MSP 430 F 135.
MSP 430 F 135 має пам'ять програм 16 Кбайт + 256 байт, ОЗУ 512 байт. Максимальна кількість контактів вводу / виводу 48. Дана конфігурація дозволяє будувати малопотребляющіе та високоефективні програми.
У запропонованого мікроконтролера достатню кількість контактів введення / виводу і пам'яті програм і даних.
На малюнку 2 наведено MSP 430 F 135.
Малюнок 2 - MSP 430 F 135
Характеристики MSP 430 F 135:
12-розрядний АЦП із внутрішнім джерелом опорної напруги,
пристроєм вибірки-зберігання,
режимом автоматичної послідовної оцифровки даних
компаратор для порівняння аналогових сигналів
16-розрядний таймер з трьома регістрами захоплення / порівняння
Послідовний комунікаційний інтерфейс (USART) з програмною налаштуванням режиму: асинхронний - UART або синхронний - SPI
Внутрішньосхемного програматор з послідовною передачею даних
Захист програмного коду
Послідовне програмування (JTAG)
На малюнку 3 наведена внутрішня структура MSP 430 F 135
Рисунок 3 - Внутрішня структура MSP 430 F 135
Проектування принципової схеми пристрою
Схема включення мікропроцесора
Мікроконтролер MSP 430 F 135 містить 6 регістрів введення / виводу. Задіємо Port 1 і Port 2 управління світлодіодним індикатором. Port 4 служить для зчитування даних з датчика Холла.
На малюнку 4 наведена структурна схема включення мікроконтролера.
Рисунок 4 - Структурна схема включення мікроконтролера
Формування тактових імпульсів
Джерелом тактових імпульсів в мікроконтролері MSP 430 F 135 може бути:
внутрішній змінний резистор
зовнішній резистор
Керамічний резонатор
32 kHz кварцовий резонатор
високочастотний кварцовий резонатор
зовнішнє джерело тактових імпульсів
У даному розробляється пристрої найкращим режимом роботи генератора є застосування зовнішнього кварцового резонатора підключається до контактів XIN і XOUT Це стабільний генератор з точною витримкою тимчасових інтервалів тактовою частоти яка необхідна для дільника USART інтерфейсу.
На рисунку 5 наведена схема тактирования.
Рисунок 5 - Схема тактирования.
Схема скидання
На малюнку 6 приведена апаратна схема скидання по включенню живлення. Дана схема необхідна для первинної ініціалізації апаратури мікроконтролера.
Малюнок 6 - Апаратна схема скидання з включення харчування
Схеми вхідних і вихідних пристроїв
Прийом даних здійснюється по послідовному RS -232 інтерфейсу. Для його нормального функціонування та забезпечення сумісності з рівнями використовуємо мікросхему інтерфейсу MAX 232. Схема включення MAX 232 наведена на рисунку 7.
Рисунок 7 - Схема включення MAX 232
РКІ підключений до мікроконтролера MSP 430 F 135 з допомогою 8-ми розрядною шиною.
Рисунок 8 - Схема підключення ЖКИ.
Алфавітно-цифрові РК - модулі представляють собою недороге і зручне рішення, що дозволяє заощадити час і ресурси при розробці нових виробів, при цьому забезпечують відображення великого обсягу інформації при гарній розрізнення і низькому енергоспоживанні. Можливість оснащення РКІ - модулів заднім підсвічуванням дозволяє експлуатувати їх в умовах зі зниженою або нульовою освітленістю, а виконання з розширеним діапазоном температур (-20 ° С. .. +70 ° С) у складних експлуатаційних умовах, в тому числі в переносній, польовий і навіть, іноді, в бортовій апаратурі.
Відповідно до тимчасової діаграмою в початковому стані сигнал Е = 0, сигнал R / W = 0, значення сигналу RS - довільне, шина даних DBO ... DB7 в стані високого імпедансу (НI). Такий стан керуючих сигналів (E і R / W) має підтримуватися весь час у проміжках між операціями обміну с LCD-модулем. Шина даних в ці моменти в принципі вільна, і може використовуватися в мультиплексному режимі для будь-яких інших цілей, наприклад, для сканування матриці клавіатури. Природно, необхідно подбати про виключення конфліктів на шині даних в момент здійснення операцій обміну с LCD-модулем.
Послідовності дій, які необхідно виконувати керуючої системі при здійсненні операцій запису і читання для 8-ми розрядної шини наведені відповідно в таблицях 1, 2. Для нормальної роботи РКІ необхідно сформувати тимчасові діаграми наведені на рисунках 9 і 10
Таблиця 1. Операції запису для 8-ми розрядної шини
|
Таблиця 2. Операції читання для 8-ми розрядної шини
|
Рисунок 9 - Тимчасова діаграма операції запису
Рисунок 10 - Тимчасова діаграма операції читання
Схема стабілізатора напруги
Стабілізатор напруги побудований на мікросхемі LM 7805. Дана мікросхема є лінійним стабілізатором напруги. Напруга стабілізації 5 V. На малюнку 11 наведена схема включення стабілізатора.
Малюнок 11 - Схема підключення стабілізатора до мікроконтролера.
Проектування програмного забезпечення мікропроцесора
3.1 Проектування модуля ініціалізації мікроконтролера
Для ініціалізації пристрою необхідно виділити пам'ять для глобальних змінних, і провести ініціалізацію портів, таймерів та послідовного інтерфейсу.
3.2 Проектування процедур обробки переривань
Цей пристрій не вимагає написання програми з обробкою переривань. У зв'язку з тим що за завданням необхідна дуже маленька швидкість обміну по RS 232 і швидкодії LCD індикатора та контролера достатньо для впевненого прийому даних.
3.3 Проектування процедур обробки інформації
У мікроконтроллер вбудований послідовний комунікаційний інтерфейс (USART) який забезпечує сумісність з форматом кадру з інтерфейсом RS 232. Узгодження рівнів описано вище.
3.4 Проектування процедур виведення інформації
Висновок даних проводиться на LCD індикатор. Управління індикатором здійснюється за трьома сигнальним і восьми інформаційним лініях зв'язку. Індикація полягає в запису кодів символів у відповідні комірки пам'яті LCD індикатора.
3.5 Проектування процедури Main ()
Процедура Main це головна процедура програми з якої починається виконання. В цій процедурі необхідно викликати процедуру ініціалізації, а потім необхідно перейти в нескінченний цикл опитування датчика, вимірювання й дешифрування величин, відображення даних виконується по перериваннях таймера. На малюнку 12 наведено загальний алгоритм роботи пристрою.
Рисунок 12 - Загальний алгоритм роботи пристрою
Лістинг програми
# Include <msp 430 F 135. H>
void vLCD _ Silence (void); / * Стан висновків "за умовчанням" * /
void vLCD _ Init (void); / * Ініціалізація дисплея * /
void vLCD _ Clear ();/* Очищення дисплея * /
void vLCD _ RetLeft ();/* Переміщення курсору в ліву позицію * /
void vLCD _ EntryModeSet (char ID, char SH) / * Установка напрями зсуву курсору
(ID = 0 / 1 - вліво / вправо) і дозвіл зсуву дисплея (SH = 1) при записі в DDRAM * /
void vLCD _ OnOff (char D, char CB) / * Включає модуль (D = 1) і вибирає тип курсора (див. даташіт) * /
void vLCD _ CurDispShift (char SC, char RL) / * Виполніяет зрушення дисплея або курсору
(SC = 0 / 1 - курсор / дисплей, RL = 0 / 1 - вліво / вправо) * /
void vLCD _ FuncSet (char DL, char _ N, char _ F) / * Встановлює розрядність інтерфейсу
(DL = 0 / 1 - 4 / 8 біта), режим розгортки рядків (_ N = 0 / 1 - один рядок / два рядки)
і розмір символу (_ F = 0 / 1 - 5х8/5х10) * /
void vLCD _ SetAddr (char ADD) / * Установка адреси для подальших операцій та вибір області DDRAM * /
void vLCD _ WriteData (char DATA) / * Запис даних в активну область * /
void vLCD_Delay (char a) / * Затримка на 0 / 1 - 40 мкс/1.95 мс * /
/ * Команди (0) / Дані (1) * /
void vRS (char set)
{
if (set)
P3OUT | = 0x80;
else
P3OUT & = ~ 0x80;
}
/ * Синхронізація * /
void vEN (char set)
{
if (set)
P3OUT | = 0x40;
else
P3OUT & = ~ 0x40;
_ NOP ();
}
/ * Запис в індикатор
RS - команди (0) / дані (1); Data - тіло команди / дані * /
void vLCD_Write (char RS, char Data)
{
vRS (RS);
_NOP ();
/ / _NOP ();
P1OUT & = Data | 0x0f; / / Запис старшої тетради.
vEN (1);
_NOP ();
/ / _NOP ();
vEN (0);
_NOP ();
/ / _NOP ();
P1OUT & = ~ 0xf0;
P1OUT | = (Data <<4) & ~ 0x0f; / / Запис молодшої тетради.
_NOP ();
/ / _NOP ();
vEN (1);
_NOP ();
/ / _NOP ();
vEN (0);
_ NOP ();
/ / _ NOP ();
P 1 OUT | = 0 xf 0; / / Встановлює на висновках стан "за замовчуванням".
_ NOP ();
/ / _ NOP ();
}
/ * Стан висновків "за умовчанням" * /
void vLCD_Silence (void)
{
vEN (0);
vRS (0);
P 1 OUT = 0 xf 0;
}
/ * Ініціалізація дисплея * /
void vLCD_Init (void)
{
for (char i = 0; i <21; i + +)
vLCD _ Delay (1); / / затримка на 40 мс.
vRS (0);
_ NOP ();
P 1 OUT & = 0 x 30 | 0 x 0 f; / / Запис старшої тетради.
vEN (1);
_ NOP ();
vEN (0);
_ NOP ();
P 1 OUT | = 0 xf 0; / / Встановлює на висновках стан "за замовчуванням".
_NOP ();
for (char i = 0; i <3; i + +)
vLCD _ Delay (1); / / затримка на 4.1 мс.
vLCD _ FuncSet (0,0,0); / / 4-х розрядна шина, розгортка 1 рядків, символ 5х8.
vLCD _ FuncSet (0,1,0); / / 4-х розрядна шина, розгортка 1 рядків, символ 5х8.
vLCD _ OnOff (1,0); / / Увімк. модуля, викл. курсору.
vLCD _ Clear ();// Очищення DDRAM.
vLCD _ EntryModeSet (1,0); / / Зрушення курсору вправо, зсув дисплея заборонений.
}
/ * Очищення дисплея * /
void vLCD _ Clear ()
{
vLCD_Write (0,0 x01);
vLCD_Delay (1);
}
/ * Переміщення курсору в ліву позицію * /
void vLCD_RetLeft ()
{
vLCD_Write (0,0 x02);
vLCD_Delay (1);
}
/ * Установка напрями зсуву курсору (ID = 0 / 1 - вліво / вправо)
і дозвіл зсуву дисплея (SH = 1) при записі в DDRAM * /
void vLCD_EntryModeSet (char ID, char SH)
{
char Data = 0x04 + (ID <<1) + SH;
vLCD_Write (0, Data);
vLCD_Delay (0);
}
/ * Включає модуль (D = 1) і вибирає тип курсора (див. даташіт) * /
void vLCD_OnOff (char D, char CB)
{
char Data = 0x08 + (D <<2) + CB;
vLCD_Write (0, Data);
vLCD_Delay (0);
}
/ * Виполніяет зрушення дисплея або курсору (SC = 0 / 1 - курсор / дисплей,
RL = 0 / 1 - вліво / вправо) * /
void vLCD _ CurDispShift (char SC, char RL)
{
char Data = 0x10 + (SC <<3) + (RL <<2);
vLCD_Write (0, Data);
vLCD_Delay (1);
}
/ * Встановлює розрядність інтерфейсу (DL = 0 / 1 - 4 / 8 біта), режим розгортки b рядків (N = 0 / 1 - один рядок / два рядки) і розмір символу (F = 0 / 1 - 5х8/5х10) * /
void vLCD_FuncSet (char DL, char _N, char _F)
{
char Data = 0x20 + (DL <<4) + (_N <<3) + (_F <<2);
vLCD_Write (0, Data);
vLCD_Delay (0);
}
/ * Установка адреси для подальших операцій та вибір області DDRAM * /
void vLCD_SetAddr (char ADD)
{
ADD + = 0x80;
vLCD_Write (0, ADD);
vLCD _ Delay (0);
}
/ * Запис даних в активну область * /
void vLCD_WriteData (char DATA)
{
vLCD_Write (1, DATA);
vLCD_Delay (0);
}
/ * Затримка на 0 / 1 - 40 мкс/1.95 мс * /
void vLCD_Delay (char a)
{
IFG 1 & = ~ WDTIFG; / / Скинули черговий прапор переривання ...
/ / Запуск Собаки з очищенням.
if (a)
WDTCTL = 0 x 5 A 00 | 0 x 1 f; / / TMSEL, SSEL, WDIS .1, WDIS .0 - період 1.95 мс.
else
WDTCTL = 0x5A00 | 0x1b; / / TMSEL, WDIS.1, WDIS.0 0 - період 12.8 мкс.
char z = 1;
if (! a) z = 4;
for (char i = 0; i <z; i + +)
{
while (! (IFG 1 & WDTIFG))
_ NOP ();// поки немає переривання від Собаки - висимо.
IFG 1 & = ~ WDTIFG; / / Скинули черговий прапор переривання ...
}
/ / Зупинка Собаки.
WDTCTL = 0 x 5 A 00 | 0 x 93; / / HOLD, TMSEL, WDIS .1, WDIS .0
}
/ * Висновок рядка c позиції line, column до кінця рядка. Якщо фактична довжина рядка більше, рядок переписується з початкової позиції.
Початок рядки: line - номер рядка зверху (0-3),
column - позиція першого символу в рядку, string - рядок символів * /
void vLCD_TransMassive (unsigned char line, unsigned char column,
unsigned char string [])
{
/ / Для коректної роботи слід встановити наступний режим:
/ / VLCD _ EntryModeSet (1,0); / / Зрушення курсору вправо, зсув дисплея заборонений.
unsigned char ADD = line, ColumnCounter = column;
/ * Обчислюємо ардес в DDRAM * /
switch (ADD)
{
case 3:
ADD = 0x54;
break;
case 2:
ADD = 0x14;
break;
case 1:
ADD = 0x40;
case 0:
break;
default:
ADD = 0x00;
}
if (column> 19)
column = 0;
ADD + = column;
vLCD _ SetAddr (ADD); / / Установка адреси.
for (char i = 0;; i ++)// Запис рядка (нескінченний цикл).
{
if (string [i] == '\ 0') / / Якщо виявлено сімовл кінця рядка - вихід з циклу.
return;
else
{
vLCD_WriteData (string [i]);
if (+ + ColumnCounter> 19) / / Якщо досягнутий фізичний кінець рядка,
{
vLCD _ SetAddr (ADD); / / продовжуємо запис з початкової позиції.
ColumnCounter = column;
}
}
}
_ NOP ();
}
Висновок
У даному курсовому проекті було розроблено віддалене пристрій індикації.
Використання зовнішнього кварцового генератора забезпечує високу стабільність роботи послідовного комунікаційного інтерфейсу (USART).
У ході проектування пристрою були розглянуті основні принципи побудови пристроїв на мікроконтролерах MSP 430 від Texas Instruments. А так само вивчені апаратні можливості даних мікроконтролерів.
Навчилися за описами роботи або тимчасовим діаграм функціонування пристроїв складати алгоритми тих чи інших блоків програм.
У цілому за розробленим курсового проекту можна помітити, що використання мікроконтролерів MSP 430 дозволяє будувати недорогі і продуктивні мікроконтролерних системи не використовую зовнішнє периферійне устаткування (аналоговий компаратор, апаратний таймі та ін.)